/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controladores;

import vista.ObtenerTeclado;
import persistencia.PersistenciaAlquiler;



import java.util.*;
import java.util.ArrayList;
import negocio.Alquiler;
import negocio.Cliente;

/**
 *
 * @author JAVA
 */
public class GestionCliente {

    /*
     * Busca una lista de Clientes que coincida con los datos que se le Introducen y la Representa
     * j=OpcionBusqueda   1=Nombre, 2=Apellidos, 3=Dni, 4=Id, 5=NombreUsuario
     */
    public static ArrayList<Cliente> buscaClientes(int j, String s) {

        ArrayList<Cliente> listaClientes = new ArrayList<Cliente>();
        System.out.println(" ");
        switch (j) {
            case 1:
                //método para seleccionar un cliente por el nombre
                listaClientes=Cliente.seleccionaCliente(1, s);
                break;
            case 2:
                //método para seleccionar un cliente por el apellido
                listaClientes=Cliente.seleccionaCliente(2, s);
                break;
            case 3:
                //método para seleccionar un cliente por el dni
                listaClientes=Cliente.seleccionaCliente(3, s);
                break;
            case 4:
                //método para seleccionar un cliente por el id
                listaClientes=Cliente.seleccionaCliente(4, s);
                break;
            case 5:
                //método para seleccionar un cliente por el nombre de usuario
                listaClientes=Cliente.seleccionaCliente(5, s);
                break;
            default:
                System.out.println("\n Opcion incorrecta. ");
                break;

        }
        if (!listaClientes.isEmpty()) {
            System.out.println("   Id       Nombre      Apellidos         Pin    Apodo       Saldo");
            for (Cliente c : listaClientes) { //Recorre la Lista de Clientes y Representa
                String res = "   ";
                int idCliente = c.getId();
                String s1 = c.getNombre();
                String s2 = c.getApellidos();
                String s3 = String.valueOf(c.getPin());
                String s4 = c.getNomUsuario();
                String s5 = String.valueOf(c.getSaldo());

                res = res + idCliente;
                for (int q = res.length(); q < 12; q++) { //Espacio
                    res = res + " ";
                }
                res = res + s1;
                for (int q = res.length(); q < 24; q++) { //Espacio
                    res = res + " ";
                }
                res = res + s2;
                for (int q = res.length(); q < 42; q++) { //Espacio
                    res = res + " ";
                }
                res = res + s3;
                for (int q = res.length(); q < 49; q++) { //Espacio
                    res = res + " ";
                }
                res = res + s4;
                for (int q = res.length(); q < 61; q++) { //Espacio
                    res = res + " ";
                }
                res = res + s5;
                System.out.println(res);
            }
        }
        return listaClientes;

    }

    /*
     * Devuelve un Cliente a partir de una Lista de Clientes y un Id existente entre ellos
     */
    public static Cliente seleccionaCliente(ArrayList<Cliente> listaClientes, int id) {
        Cliente c = null;
        int j = id;
        while (j != 0) {
            if (!listaClientes.isEmpty()) {
                for (Cliente cliente : listaClientes) {
                    if (cliente.getId() == id) {
                        c = cliente;
                    }
                }
            }
            if (c != null) {
                j = 0;
            } else {
                id = ObtenerTeclado.dameEntero("Id Erroneo!! Introduce el Id del Cliente seleccionado de nuevo:");
            }
        }
        return c;
    }

    /*
     * Modifica el Saldo del Cliente que se le Introduce
     */
    public static void modificarSaldoCliente(Cliente c,float incrementoSaldo) {
        c.setSaldo(c.getSaldo() + incrementoSaldo);
        System.out.println("Saldo nuevo: " + c.getSaldo());
        String saldo=((Float)c.getSaldo()).toString();
        c.setCliente(10, saldo);
    }
    /*
     * Modifica Otros Campos del Cliente que se le introduce
     * k=OpcionCampo    1=Nombre, 2=Apellidos, 3=Dni, 4=Domicilio, 5=Telefono, 6=Email, 7=Vip, 8=NombreUsuario, 9=Pin
     */
    public static void modificarOtrosDatosCliente(int k,Cliente c,String s) {

        switch (k) {
            case 1:
                if(c.setCliente(1, s)==0){
                    System.out.println("Error!: El nombre No se ha modificado Correctamente!");
                }else{
                    System.out.println("Nombre Cambiado!!");
                }
                break;
            case 2:
                if(c.setCliente(2, s)==0){
                    System.out.println("Error!: Los apellidos No se han modificado Correctamente!");
                }else{
                    System.out.println("Apellidos Cambiados!!");
                }
                break;
            case 3:
                if(c.setCliente(3, s)==0){
                    System.out.println("Error!: El dni No se ha modificado Correctamente!");
                }else{
                    System.out.println("Dni Cambiado!!");
                }
                break;
            case 4:
                if(c.setCliente(4, s)==0){
                    System.out.println("Error!: El domicilio No se ha modificado Correctamente!");
                }else{
                    System.out.println("Domicilio Cambiado!!");
                }
                break;
            case 5:
                if(c.setCliente(5, s)==0){
                    System.out.println("Error!: El telefono No se ha modificado Correctamente!");
                }else{
                    System.out.println("Telefono Cambiado!!");
                }
                break;
            case 6:
                if(c.setCliente(6, s)==0){
                    System.out.println("Error!: El email No se ha modificado Correctamente!");
                }else{
                    System.out.println("Email Cambiado!!");
                }
                break;
            case 7:
                if(s.equals("1")){
                    int i=c.setCliente(7, "true");
                    if(i!=0){
                        System.out.println("El Cliente ahora es Vip!!");
                    }else{
                        System.out.println("Error!: No se ha modificado el estado del Cliente!");
                    }
                }else{
                    int i=c.setCliente(7,"false");
                    if(i!=0){
                        System.out.println("El Cliente ahora es No Vip");
                    }else{
                        System.out.println("Error!: No se ha modificado el estado del Cliente!");
                    }
                }
                break;
            case 8:
                if(c.setCliente(8, s)==0){
                    System.out.println("Error: El nombre de usuario No se ha modificado Correctamente!");
                }else{
                    System.out.println("Nombre de Usuario Cambiado!!");
                }
                break;
            case 9:
                if(c.setCliente(9, s)==0){
                    System.out.println("Error!: El pin No se ha modificado Correctamente!");
                }else{
                    System.out.println("Pin Cambiado!!");
                }
                break;
            default:
                System.out.println("\n Opcion incorrecta. ");
                break;
        }

    }
    
    /*
    public static List<Alquiler> mostrarDatosCliente(Cliente c) {
       List<Alquiler> lista = PersistenciaAlquiler.obtenerListaAlquileres(c);
        String res = "";
        System.out.println("Id     Nombre       Apellidos         Pin    Apodo        Saldo       Vip  Alq.Pendientes");
        int id = c.getId();
        String s1 = c.getNombre();
        String s2 = c.getApellidos();
        String s4 = c.getNomUsuario();
        String s3 = String.valueOf(c.getPin());
        String s5 = String.valueOf(c.getSaldo());
        String vip = "";
        String alq = "";
        if (c.isVip()) {
            vip = "Sí";
        } else {
            vip = "No";
        }
        if (lista.isEmpty()) {
            alq = "No";
        } else {
            alq = "Sí";
        }
        res = res + id;
        for (int q = res.length(); q < 7; q++) { //Espacio
            res = res + " ";
        }
        res = res + s1;
        for (int q = res.length(); q < 20; q++) { //Espacio
            res = res + " ";
        }
        res = res + s2;
        for (int q = res.length(); q < 38; q++) { //Espacio
            res = res + " ";
        }
        res = res + s3;
        for (int q = res.length(); q < 45; q++) { //Espacio
            res = res + " ";
        }
        res = res + s4;
        for (int q = res.length(); q < 58; q++) { //Espacio
            res = res + " ";
        }
        res = res + s5;
        for (int q = res.length(); q < 70; q++) { //Espacio
            res = res + " ";
        }
        res = res + vip;
        for (int q = res.length(); q < 75; q++) { //Espacio
            res = res + " ";
        }
        res = res + alq;
        System.out.println(res);
        
        return lista;
    }*/
    public static String auxChar(String cadena, int numeroAtributo){
        int indice=1;
        String caracter="";
        for(int q=0;q<cadena.length();q++){
            if(cadena.charAt(q)=='/'){indice++;}
            if(indice==numeroAtributo){
                caracter=caracter+cadena.charAt(q);
            }
        }
        caracter=caracter.substring(1);
        return caracter;
    }
    /*
     * Pregunta los Datos de un Cliente y lo Introduce en la Base de Datos si no existen Coincidencias
     */
    public static int altaCliente(String cadena) {
        int k = 1;
        String nombre=auxChar(cadena, 1);
        String apellidos=auxChar(cadena,2);
        String dni=auxChar(cadena,3);
        String direccion=auxChar(cadena,4);
        String correo=auxChar(cadena,5);
        String tlf=auxChar(cadena,6);
        String apodo=auxChar(cadena,7);
        int pin=Integer.parseInt(auxChar(cadena,8)); 
        /*
         *Se busca el Cliente en la Base de Datos, si está cancela la operacion. Se comprueba que sea unico el Dni, el Nombre de Usuario
         * y el Pin. Si alguno de estos se repite se Cancela la Operación.
         */
        Cliente c = new Cliente(nombre, apellidos, dni, direccion, correo, tlf, apodo, pin);
        if (c.existeCliente() != 0) {
            if (c.existeCliente() == 1) {
                System.out.println("Error!! Ya existe un Cliente con ese Dni en la Base de Datos. Operación Cancelada!");
            }
            if (c.existeCliente() == 2) {
                System.out.println("Error!! Ya existe un Cliente con ese Nombre de Usuario en la Base de Datos. Operación Cancelada!");
            }
            if (c.existeCliente() == 3) {
                System.out.println("Error!! Ya existe un Cliente con esos Datos. Operación Cancelada!");
            }

            k = ObtenerTeclado.dameEntero("Quieres volver a introducir un nuevo Cliente?? Si(1)/No(0)");
        } else {
            c.addCliente();
            System.out.println("Cliente Creado Correctamente!");
            k = 0;
        }
        return k;
    }

    /*
     * bajaCliente dá de baja un Cliente de la base de datos. Llama al método buscaClientes para preguntar por el cliente que se
     * quiere borrar, despues confirma y lo da de baja de la base de datos
     */
    public static void bajaCliente(Cliente c) {
        int i=c.eliminarCliente();
        if(i>0){
            System.out.println("Cliente dado de Baja Correctamente!");
        }else{
            if(c.existeCliente() >0){
                System.out.println("Error: El Cliente NO ha sido dado de Baja!");
            }else{
                System.out.println("Error: Ha ocurrido un Error Indeterminado en la Persistencia de Datos! Compruebelos!!!");
            }
        }
    }

    /*
     * Devuelve un Cliente por el NombreUsuario y Pin
     */
    public static Cliente obtenerCliente(String nomusuario, int pin) {
        Cliente c = null;
        c.getCliente(nomusuario, pin);
        return c;
    }
}
